'use strict';

var BaseController = require('./base.js');

class AccessController extends BaseController {
    async index() {
        const {ctx} = this;
        // 1. 在access表中找出  module_id = 0 的数据   管理员管理   权限管理   角色管理  (模块)
        // 2. 让access表和access表关联  条件 找出 access表中 module_id = _id 的数据 

        var result = await ctx.model.Access.aggregate([
            {
                $lookup:{
                    from: 'access',              // 关联表 *****(自我关联)*****
                    localField: '_id',           // 本表id
                    foreignField: 'module_id',   // 被关联表 对应的 id
                    as: 'items'
                }
            },
            {
                $match: {
                    "module_id" : '0'
                }
            }
        ])

        await this.ctx.render('admin/access/index', {
            list: result
        })
    }

    async add() {
        const {ctx} = this;
        // 获取模块列表
        var moduleList = await ctx.model.Access.find({"module_id": '0'});

        await this.ctx.render('admin/access/add', {
            moduleList
        })
    }

    async doAdd() {
        const {app, ctx} = this;
        var addResult = ctx.request.body;
        var module_id = addResult.module_id;        
        
        // 菜单或者操作
        if (module_id != 0) {
            addResult.module_id = app.mongoose.Types.ObjectId(module_id)
        } else {  // module_id : 0

        }

        var access = new ctx.model.Access(addResult);
        access.save();

        await this.success('/admin/access', '增加权限成功');
    }

    async edit() {

        var id = this.ctx.request.query.id;

        const {app, ctx} = this;
        // 获取编辑的数据
        var accessResult = await this.ctx.model.Access.find({"_id": id});

        // 获取模块列表
        var moduleList = await ctx.model.Access.find({"module_id": '0'});

        await this.ctx.render('admin/access/edit', {
            list: accessResult[0],
            moduleList
        })
    }

    async doEdit() {

        const {app, ctx} = this;
        var updateResult = ctx.request.body;
        var id = updateResult.id;
        var module_id = updateResult.module_id;        
        
        // 菜单或者操作
        if (module_id != 0) {
            updateResult.module_id = app.mongoose.Types.ObjectId(module_id); 
        } else {  // module_id : 0

        }
        var result = await ctx.model.Access.updateOne({"_id": id}, updateResult)

        await this.success('/admin/access', '修改权限成功');
    }

}

module.exports = AccessController;
